extends CharacterBody2D
class_name Enemy

# 代理ID，全局唯一
var id : int
# 圆的半径
@export var radius : float
# 避障责任权重
@export var weight : float
# KDTree查找的最大相邻Agent数量
@export var max_neighbors : int
# KDTree查找相邻Agent时候的最大检测距离
@export var neighbor_dist : float
# 提前避障的时间（可以大于帧间隔deltaTime，表示要提前避障）
@export var time_horizon : float
# 预期移动速率
@export var speed : float
# 当前位置
var current_position : Vector2
# 期望速度，也就是v^opt
var pref_velocity : Vector2
# 当前速度
var current_velocity : Vector2
# 最大速率
var max_speed : float
# 移动的目标位置，用来计算期望速度prefVelocity
var target_pos : Vector2
var target

func _init_data(_target_pos) :
	target = _target_pos

func _physics_process(delta):
	target_pos = (target.global_position-global_position).normalized() * 100.0
	move_and_slide()

func _get_avoid_speed(self_enemy : CharacterBody2D, enemy_list : Array[CharacterBody2D]) :
	
	var v_a = self_enemy.velocity
	var self_pos = self_enemy.global_position
	
	for enemy in enemy_list :
		var v_b = -enemy.velocity
		
		#叠加向量
		var v_c_start = self_pos
		var v_c_end = v_c_start + v_a + v_b
		
		#判断叠加向量是否在避障区域内
		
		
		#让速向量
		var v_d_start = v_c_end
		var v_d_circle_p = (v_d_start - enemy.global_position).normalized() * 40.0 + enemy.global_position
		var v_d_end = (v_d_circle_p - v_d_start).normalized() * (v_d_circle_p - v_d_start).length() / 2.0 + v_d_start
		
		#让速向量过圆切线
		var v_f = Vector2(v_d_end.y-v_d_start.y,v_d_start.x-v_d_end.x)
		
		#y = kx + b
		var k = v_f.y / v_f.x
		var b = v_d_end.y - (k * v_d_end.x)
	
	pass
